﻿using System.Collections.Generic;
using System.Linq;
using System.Web;
using Negocio = PSE.Tools.CadastroMensagens.Negocio;
using PSE.Tools.Util.Entidades;
using System;
namespace PSE.Tools.CadastroMensagens.Apresentacao
{
    public class Mensagens
    {
        private IApresentacao _apresentacao;
        private Negocio.Mensagens _negocioMensagem;
        public Mensagens(IApresentacao apresentacao, Negocio.Mensagens negocioMensagem)
        {
            _apresentacao = apresentacao;
            _negocioMensagem = negocioMensagem;
        }

        public bool PodeAdicionarTraducoes(int id, string siglaIdioma)
        {
            return _negocioMensagem.PodeAdicionarTraducoes(id, siglaIdioma);
        }

        public IList<Entidades.Idioma> ListaIdiomas()
        {
            try
            {
                Negocio.Idiomas negocioIdiomas = new Negocio.Idiomas();
                var idiomas = negocioIdiomas.Selecionar();
                return idiomas;
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }
        }

        public IList<Entidades.Idioma> ListaIdiomasSemTraducao(int id)
        {
            try
            {
                return _negocioMensagem.ListaIdiomasSemTraducao(id);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }        
        }

        public Entidades.Idioma ObtemIdiomaDefault(int id)
        {
            try
            {
                return _negocioMensagem.ObtemIdiomaDefault(id);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }
        }

        public IList<Entidades.Mensagem> ObterPorId(int id)
        {
            try
            {
                return _negocioMensagem.ObterPorId(id);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }
        }

        public Entidades.Mensagem ObterPorIdEIdioma(int id, string sigla)
        {
            try
            {
                return _negocioMensagem.ObterPorIdEIdioma(id, sigla);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }
        }

        public IList<Entidades.Mensagem> Lista(Func<Entidades.Mensagem, bool> filtro)
        {
            try
            {
                return _negocioMensagem.Selecionar(filtro);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
                return null;
            }
        }

        public bool Inserir(Entidades.Mensagem Mensagem)
        {
            bool retorno = false;
            try
            {
                Mensagem.CriadoPor = "p-angsilva";
                _negocioMensagem.Inserir(Mensagem, 0);
                _apresentacao.EnviarMensagem("Mensagem Inserida com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }

        public bool Atualizar(Entidades.Mensagem Mensagem)
        {
            bool retorno = false;
            try
            {
                Mensagem.AtualizadoPor = "p-angsilva";
                _negocioMensagem.Atualizar(Mensagem, 0);
                _apresentacao.EnviarMensagem("Mensagem Atualizada com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }

        public bool Excluir(Entidades.Mensagem Mensagem)
        {
            bool retorno = false;
            try
            {
                _negocioMensagem.Excluir(Mensagem);
                _apresentacao.EnviarMensagem("Mensagem Excluída com Sucesso");
                retorno = true;
            }
            catch (ValidacaoEntidadeException ex)
            {
                _apresentacao.EnviarMensagemValidacao(ex.Validacoes);
            }
            catch (Exception ex)
            {
                _apresentacao.EnviarMensagemErro(ex.Message);
            }
            return retorno;
        }
    }
}
